2019牛客暑期多校训练营(第八场)Flower Dance
题意: 给$n$个点 $m$条边,每条边有一个权值区间,表示能通过这个区间的 值的范围,问从$1$到$n$可以通过的权值有多少个。
题解:
1.DFS线段树+离散化+并查集
这个线段树,其实也不能算是个正常的线段树,他build
的之后就没啥用了,没有更新和查询.。。直接在线段树上dfs
,首先把权值离散化,然后存入线段树中,线段树每个节点表示,区间[l,r]
,中有哪些边,这样每次深搜下去,经过的边用并查集维护起来,表示哪些点是联通的,然后如果,1
和n
联通的话就更新权值。这题有回溯,就有拆边,所以并查集要保存路径,而且要加按秩合并
的优化,不然会超时。
写离散化线段树尽量保存 (l,r]
左开右闭的区间值,保存[l,r]
的区间会出问题
1 |
|